package middlewares

import (
	"github.com/dgrijalva/jwt-go"
	jwtmiddleware "github.com/iris-contrib/middleware/jwt"
	"github.com/kataras/iris/context"
	"github.com/spf13/viper"
	"irisfarm/app/commons"
)

func JwtNew() *jwtmiddleware.Middleware {
	//jwt中间件
	jwtHandler := jwtmiddleware.New(jwtmiddleware.Config{
		//这个方法将验证jwt的token
		ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) {
			//自己加密的秘钥或者说盐值
			return []byte(viper.GetString("app.key")), nil
		},
		//设置后，中如果签名方法不是常量间件会验证令牌是否使用特定的签名算法进行签名
		//，则可以使用ValidationKeyGetter回调来实现其他检查
		//重要的是要避免此处的安全问题：https://auth0.com/blog/2015/03/31/critical-vulnerabilities-in-json-web-token-libraries/
		//加密的方式
		SigningMethod: jwt.SigningMethodHS256,
		//验证未通过错误处理方式
		ErrorHandler: func(ctx context.Context, e error) {
			h := commons.HttpError{}
			h.AuthError(ctx, e.Error())
		},

		//debug 模式
		//Debug: bool
	})

	return jwtHandler
}
